/**
 * Universidad del Valle de Guatemala
 * Facultad de Ingenieria
 * Departamento de Ciencias de la Computacion
 * Algoritmos y Estructuras de Datos
 * Hoja de Trabajo 1
 * Diego Garcia Zamora
 * Carne no. 08317
 */

package PaqueteRadio;
import javax.swing.*;

/**
 *  Clase encargada de implementar la interfaz de radio
 * @author Diego Garcia
 */
public class Radio implements IRadio{

    //-----------------------------------------------------------------
    // Atributos
    //-----------------------------------------------------------------
    /**
     * indica que se está sintonizando la frecuencia AM
     */
    private String AM = "am";
    /**
     * indica que se está sintonizando la frecuencia FM
     */
    private String FM = "fm";
    /**
     * indica el estado de energia
     */
    private boolean encendido;
    /**
     * indica la frecuencia del radio
     */
    private String frecuencia;
    /**
     * indica la emisora en la que se encuentra actualmente
     */
    private float estacion;
    /**
     * indica la emisora que se ha guardado en cada posicion
     */
    private float[][] botones;

    //-----------------------------------------------------------------
    // Constructor
    //-----------------------------------------------------------------
    public Radio(){
        encendido = true;
        frecuencia = FM;
        estacion = (float) 87.8;
        botones = new float[12][2];
        // se inicializan los botones en cero
        for(int i=0; i<12; i++){
            botones[i][0] = (float) 87.8;
            botones[i][1] = 530;
        }
    }

    //-----------------------------------------------------------------
    // Metodos Abstractos Implementados
    //-----------------------------------------------------------------
    /**
     * cambia el estado de energia del radio
     */
    public void energia() {
        if(encendido == true) encendido = false;
        else encendido = true;
    }

    /**
     * dice en que estado esta el radio
     * @return true si esta encendido. false si esta apagado
     */
    public boolean estaEncendido() {
        return encendido;
    }

    /**
     * cambia la frecuencia entre am y fm
     * cambia la emisora a donde debe de estar
     */
    public void cambiarFrecuencia() {
        if(FM.equals(frecuencia)){
            frecuencia = AM;
            estacion = 530;
        }
        else{
            frecuencia = FM;
            estacion = (float) 87.8;
        }
    }

    /**
     * dice que emisora esta el radio
     * @return AM si esta ahi. FM si esta ahi.
     */
    public String darFrecuencia() {
        return frecuencia;
    }

    /**
     * si esta en fm le suma 0.2 a la emisora
     * si esta en am le suma 10 a la emisora
     * si llega a uno de los limites regresa al inicio o al final
     * @param adelante dice si avanza hacia adelante o atras
     */
    public void cambiarEmisora(boolean adelante) {
        if(FM.equals(frecuencia) && (estacion >= 87.8 && estacion <= 107.8)){
            if(adelante == true) estacion += 0.2;
            else estacion -= 0.2;
        }
        else if(FM.equals(frecuencia)){
            if(estacion >= 107.8 && adelante == true) estacion = (float) 87.8;
            else estacion = (float) 107.8;
        }
        else if(AM.equals(frecuencia) && (estacion >= 530 && estacion <= 1610)){
            if(adelante == true) estacion += 10;
            else estacion -= 10;
        }
        else if(AM.equals(frecuencia)){
            if(estacion >= 1610 && adelante == true) estacion = (float) 530;
            else estacion = (float) 1610;
        }
    }

    /**
     * en que emisora se encuentra
     * @return la emisora especifica en que se encuentra
     */
    public float darEmisora() {
        return estacion;
    }

    /**
     * coloca en la matriz la emisora que ingresa como parametro
     * @param boton en que posicion se va a guardar
     * @param emisora que estacion se va a guardar
     */
    public void guardarEmisora(int boton, float emisora) {
        if(FM.equals(frecuencia)) botones[boton][0] = emisora;
        else botones[boton][1] =  emisora;
    }

    /**
     * da la emisora que esta almacenada
     * @param boton posicion donde esta almacenada la estacion
     */
    public void seleccionarEmisora(int boton) {
        if(FM.equals(frecuencia) && botones[boton][0]!=0) estacion = botones[boton][0];
        else if(AM.equals(frecuencia) && botones[boton][1]!=0)estacion = botones[boton][1];
    }
}